#include "cpu/exec/template-start.h"

#define instr call

static void do_execute()
{
#if DATA_BYTE == 2
    panic("call 16位\n");
#elif DATA_BYTE == 4
    if (ops_decoded.opcode == 0xe8)
    {
        // push
        REG(R_ESP) -= DATA_BYTE;
        MEM_W(REG(R_ESP), cpu.eip + DATA_BYTE + 1); // 压入的是这条call指令后的那一条指令位置
        cpu.eip += op_src->val;                     // 这里直接加就可以了，不需要考虑指令本身的长度，因为call指令结束后会加上自己的长度
        print_asm_template1();
    }

#endif
}
make_instr_helper(i)

#include "cpu/exec/template-end.h"